package com.gem.day09;

/**
 * 本类用来演示java.lang.String
 * 
 * 注意:
 * String类是一个不变类,即字符串一旦创建,无法改变!
 * 
 * @author easonsy
 * 2020年7月28日 下午3:19:22
 */
public class StringDemo {
	public static void main(String[] args) {
		//创建字符串
		//1.new创建
		String str1 = new String("abc");
		String str2 = new String("abc");
		System.out.println(str1 == str2);//false
		System.out.println(str1.equals(str2));//true

		/*
		 * 2.串池创建
		 * 当创建str3对象时,把该对象存放在串池中,当第二次创建时,
		 * 优先从串池中搜索是否含有该相同对象,如果有,则直接把内存
		 * 地址赋值给新对象
		 */
		String str3 = "abc";
		String str4 = "abc";
		System.out.println(str3 == str4);//true
		System.out.println(str3.equals(str4));//true

		System.out.println("-----------------------------");

		/*
		 * 字符串拼接
		 * 方式一:使用+拼接
		 * 原理:字符串是一个不变类,一旦创建无法改变,通过+拼接是会产生不同的额外对象
		 * 
		 * 结论:使用+号拼接,费事费力费资源,拼接越多,则性能越低
		 * 
		 * 方式二:使用StringBuilder拼接
		 * 
		 * 结论:
		 * JDK8.0之后,+拼接内部自动转换成StringBuilder的append()方法,即+方式和
		 * append()性能是一样的!
		 */
		String str = "abc";
		//StringBuilder stringBuilder = new StringBuilder("abc");
		long start = System.currentTimeMillis();
		for (int i = 0; i < 100000000; i++) {
			str += "def";
		}

		/*for (int i = 0; i < 100000000; i++) {
			stringBuilder.append("def");
		}*/
		long end = System.currentTimeMillis();
		System.out.println("耗时: " + (end - start));
	}
}
